home *** CD-ROM | disk | FTP | other *** search
- #include "wire3d.h"
- #include "sin.dat"
- #include <stdio.h>
-
- void roll(int *s_point,int *d_point,unsigned char *angle,int *offset)
- {
- int point_w[4][3];
- int z_w;
-
- #ifdef TEST
- printf("s:x=%4d,y=%4d,z=%4d\n",s_point[0],s_point[1],s_point[2]);
- #endif
-
- point_w[0][0]=s_point[0];
- point_w[0][1]=s_point[1];
- point_w[0][2]=s_point[2];
-
- /* X軸の回転 */
- point_w[1][0]= point_w[0][0];
- point_w[1][1]=(point_w[0][1]*cos[angle[0]]+point_w[0][2]*sin[angle[0]])>>16;
- point_w[1][2]=(-point_w[0][1]*sin[angle[0]]+point_w[0][2]*cos[angle[0]])>>16;
-
- /* Y軸の回転 */
- point_w[2][0]=(point_w[1][0]*cos[angle[1]]-point_w[1][2]*sin[angle[1]])>>16;
- point_w[2][1]= point_w[1][1];
- point_w[2][2]=(point_w[1][0]*sin[angle[1]]+point_w[1][2]*cos[angle[1]])>>16;
-
- /* Z軸の回転 */
- point_w[3][0]=((point_w[2][0]*cos[angle[2]]+point_w[2][1]*sin[angle[2]])>>16)+offset[0];
- point_w[3][1]=((-point_w[2][0]*sin[angle[2]]+point_w[2][1]*cos[angle[2]])>>16)+offset[1];
- point_w[3][2]= point_w[2][2]+offset[2];
-
- /* 視角の調整 */
- z_w=point_w[3][2]*SIGHT_ANGLE+65536;
- #ifdef TEST
- printf("z_w=%f\n",z_w);
- #endif
- point_w[3][0]=(int)((point_w[3][0]<<16)/z_w);
- point_w[3][1]=(int)((point_w[3][1]<<16)/z_w);
- point_w[3][2]=(int)((point_w[3][2]<<16)/z_w);
-
- d_point[0]=point_w[3][0];
- d_point[1]=point_w[3][1];
- d_point[2]=point_w[3][2];
-
- #ifdef TEST
- printf("d:x=%4d,y=%4d,z=%4d\n",d_point[0],d_point[1],d_point[2]);
- #endif
-
- }
-